package String.api;

public class StringTest01 {
    public static void main(String[] args) {
        String s1 = new String();
        String s2 = null;
        System.out.println(s1);//这里是空字符串
        System.out.println(s2);//这里是null

        //定义有初始值的String对象
        String s3 = new String("abc");
        System.out.println(s3);

        //定义有初始值的String对象
        String s4 = new String("abc");
        //提问：s3和s4的地址一样吗
        System.out.println(s3 == s4);//false
        //定义一个字符串数组
        char[] c = {'a', 'b', 'c'};
        String s5 = new String(c);
        System.out.println(s5);//abc
        /**
         * 直接将字符串赋值给String变量，内存又是怎么样
         * 对于引用型类型 ==比较的是内存地址，对于基本数据类型，==比较的是值
         *
         */

        //如果是直接创建的方式，有对应的常量存在，就复用指向该常量的对象，不再创建新对象
        String s6 = "Hello";
        String s7 = "Hello";
        System.out.println(s6==s7);//true
        //字符串一旦被赋值，字符串的内容不能改变，而引用可以改变
        String s8 ="abc";
        String s9 ="mry";
        String s10=s8+s9;
        System.out.println(s10);//abcmry


    }
}
